Skip to main content

JinjaCare – HackTheBox

Dificultad: Very Easy
Categoría: Web

Intro

🧨 Writeup - Easy Machine (SSTI)

En este Challenge de nivel Very easy de HackTheBox, abordamos un escenario clásico de Server Side Template Injection, aprovechando una vulnerabilidad presente en una aplicación web expuesta públicamente.

Durante el análisis y explotación, seguimos un flujo directo y efectivo:

  • 🔬 Detección de SSTI al encontrar una plantilla vulnerable en el backend
  • 🛠️ Explotación del template para ejecutar código directamente en el servidor

Este writeup documenta los pasos esenciales para obetener la flag.

⚠️ Este contenido es exclusivamente educativo y está orientado a mejorar habilidades de pentesting ético.

🌐 Reconocimiento

Al acceder por primera vez a la IP del reto en el navegador, nos encontramos con una página web que aparenta ser un portal informativo sobre las vacunas contra el COVID-19.

Pagina

🧾 Exploración

Navegando por la página, encontramos un formulario de registro accesible.
Creamos una cuenta para ver qué hay detrás del login y explorar posibles funcionalidades internas del sitio.

Login

Tras iniciar sesión, se habilita una zona de usuario que no estaba visible antes.
A partir de aquí empezamos a curiosear el comportamiento de la web desde dentro.

Dashboard

🔥 Explotación

Después de revisar el comportamiento de la web durante un rato, pensamos en una posible vulnerabilidad de Server Side Template Injection (SSTI). Probamos con el payload 7 * 7 a ver si tenemos suerte.

payload1

Ahora probamos a generar un certificado que ahi aparece nuestro nombre y vemos si se ejecuta como queremos:

49

Efectivamente la página responde con el resultado calculado: 49.
Eso confirma que hay una inyección de templates activa.

49

A partir de aquí podemos seguir jugando con cargas más agresivas para intentar leer archivos o ejecutar comandos en el sistema.

🧬 Exploración con SSTI

Una vez confirmada la vulnerabilidad de SSTI, comenzamos a probar cargas más avanzadas para ejecutar comandos en el sistema desde el propio template.

El objetivo es descubrir dónde podría estar almacenada la flag, así que vamos paso a paso:

Primero probamos con:


{{config.__class__.__init__.__globals__['os'].popen('ls').read()}}

Esto nos devuelve un listado del directorio actual en el que se ejecuta la aplicación.

payload1

Luego ampliamos el alcance para ver el contenido del directorio padre:


{{config.__class__.__init__.__globals__['os'].popen('ls ..').read()}}

payload2

Y finalmente, apuntamos directamente a lo que parece el archivo que contiene la flag:


{{config.__class__.__init__.__globals__['os'].popen('cat ../flag.txt').read()}}

Este último payload devuelve el contenido completo de la flag directamente en la respuesta del servidor. flag

✅ Reto completado

Después de confirmar la vulnerabilidad SSTI y ejecutar cargas que nos permitieron leer archivos del sistema, logramos acceder al contenido de flag.txt.

retocompletado

¡Máquina terminada! 🎉